package com.atzxh.heima.netty.c1;

import java.nio.ByteBuffer;

import static com.atzxh.heima.netty.c1.ByteBufferUtil.debugAll;

/**
 * @author 小红同学
 * @date 2023-12-13-23:42
 * @description
 */
public class TestByteBufferExam {
    public static void main(String[] args) {
        /*
         网络上有多条数据发送给服务端，数据之间使用 \n 进行分隔
         但由于某种原因这些数据在接收时，被进行了重新组合，例如原始数据有3条为
             Hello,world\n
             I'm zhangsan\n
             How are you?\n
         变成了下面的两个 byteBuffer (黏包，半包)
             Hello,world\nI'm zhangsan\nHo
             w are you?\n
         现在要求你编写程序，将错乱的数据恢复成原始的按 \n 分隔的数据
         */

        ByteBuffer byteBuffer = ByteBuffer.allocate(32);
        byteBuffer.put("Hello,world\nI'm zhangsan\nHo".getBytes());
        split(byteBuffer);
        byteBuffer.put("w are you?\n".getBytes());
        split(byteBuffer);
    }

    private static void split(ByteBuffer byteBuffer) {
        byteBuffer.flip();
        for (int i = 0; i < byteBuffer.limit(); i++) {
            // 找到一条完整信息
            if (byteBuffer.get(i) == '\n') {
                int length = i + 1 - byteBuffer.position();
                // 存到新的 ByteBuffer 中
                ByteBuffer target = ByteBuffer.allocate(length);
                // 从 byteBuffer 读，向 target 写
                for (int j = 0; j < length; j++) {
                    target.put(byteBuffer.get());
                }
                debugAll(target);
            }
        }
        byteBuffer.compact();
    }
}
